<?php

require_once 'set.php';

function draw_test_header()
{
    echo '<table style="font-family: \'Arial Unicode MS\'; margin: 5em;"><tbody><tr>
    <td style="width: 3em;"><span></span></td>
    <td style="width: 1em;"><span></span></td>
    <td style="width: 10em;"><span></span></td></tr>';
}

function draw_test_footer()
{
    echo '</tbody></table>';
}

function draw_test_row(_Set &$set, $element)
{
    echo '<tr>', '<td style="text-align: right; padding-right: 0.3em;">', str_replace('-', '&#8722;', "{$element}"), '</td>', '<td>', $set->has_a($element) ? '&#8712;' : '&#8713;', '</td>';
    echo '<td>', $set->toHTML(), '</td>';
    echo '</tr>';
}

//-----------------------------------------------------

/*

call_user_func_array --  Вызывает пользовательскую функцию с массивом параметров
call_user_func --  Вызывает пользовательскую функцию
create_function -- Создаёт анонимную (lambda-style) функцию
func_get_arg -- Возвращает элемент из списка аргументов
func_get_args --  Возвращает массив аргументов функции
func_num_args --  Возвращает количество аргументов, переданных функции
function_exists --  Возвращает TRUE, если данная функция определена
get_defined_functions --  Возвращает массив всех определённых функций
register_shutdown_function --  Регистрирует функцию, которая выполняется по завершению работы скрипта
register_tick_function --  Регистрирует функцию для выполнения при каждом тике
unregister_tick_function --  Удаляет функцию из списка зарегистрированных для выполнения при каждом тике


call_user_method_array --  Вызываем метод объекта с массивом параметров [устаревшее] используйте функцию call_user_func_array() с array(&$obj, "method_name") в качестве параметра имени функции.
call_user_method --  Вызывает метод указанного объекта [устаревшее]  используйте функцию call_user_func() с array(&$obj, "method_name") в качестве параметра имени функции.
class_exists -- Проверяет был ли объявлен класс
get_class_methods -- Возвращает массив имен методов класса
get_class_vars --  Возвращает массив свойств класса с их инициализационными значенями
get_class -- Возвращает имя класса к которому принадлежит объект
get_declared_classes -- Возвращает массив с именами объявленных классов
get_declared_interfaces --  Возвращает массив всех объявленных в текущей итерации интерфейсов.
get_object_vars -- Возвращает ассоциативный массив свойств и значений объекта
get_parent_class -- Возвращает имя класса базового для объекта или класса
interface_exists -- Checks if the interface has been defined
is_a --  Возвращает TRUE если объект принадлежит классу или является одним из его наследователей.
is_subclass_of --  Возвращает TRUE если объект является экземпляром класса, наследующего данный.
method_exists -- Проверяет существует ли метод в данном классе
property_exists --  Checks if the object or class has a property

*/

draw_test_header();

draw_test_row(new EmptySet(), 7);

draw_test_row(new FullSet(), 4);

draw_test_row(new EnumSet(12, 13, 14, 45, 56, 67), 47);

draw_test_row(new RangeSet(12, 15), 11);

draw_test_row(new SingleSet(-125), -125);

draw_test_row(new LtSet(5), 8);

draw_test_row(new GtSet(5), 7);

draw_test_row(UnionSet::_union(new SingleSet(12), new SingleSet(14)), -125);

draw_test_row(UnionSet::_union(new RangeSet(12, 15), new SingleSet(10)), -125);

draw_test_row(UnionSet::_union(new RangeSet(12, 15), new SingleSet(17)), -125);

draw_test_row(UnionSet::_union(UnionSet::_union(new RangeSet(5, 15), new NotSet(new SingleSet(5))), new SingleSet(12)), 5);

draw_test_footer();

?>